#pragma once
#include <uniform_nested_sequence.h>
#include <stored_sequence.h>
#include <cublas.h>
#include <cuda.h>

// single precision
typedef uniform_nested_sequence<float, 0> SubMatrix;
typedef SubMatrix Vector;
typedef uniform_nested_sequence<float, 1> Matrix;

//double precision
typedef uniform_nested_sequence<double, 0> DSubMatrix;
typedef DSubMatrix DVector;
typedef uniform_nested_sequence<double, 1> DMatrix;


/* BLAS 1 routines */
//TODO


/* BLAS 2 routines */
#include <copperhead-sgbmv.h>
#include <copperhead-sgemv.h>
#include <copperhead-sger.h>
#include <copperhead-ssymv.h>
// #include <copperhead-dgemv.h>
// #include <copperhead-dger.h>


/* BLAS 3 routines */

#include <copperhead-sgemm.h>
// #include <copperhead-dgemm.h>

/* Helper functions */

#include "copy.h"
#include "util.h"
